package com.example.service;

import cn.hutool.core.util.ObjectUtil;
import com.example.dao.*;
import com.example.entity.*;
import com.example.exception.CustomException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Service
public class XuankeInfoService {
    @Resource
    private XuankeInfoDao xuankeInfoDao;

    @Resource
    private ZhuanyeInfoDao zhuanyeInfoDao;

    @Resource
    private TeacherInfoDao teacherInfoDao;

    @Resource
     private StudentInfoDao studentInfoDao;
    @Resource
    private ClassInfoDao classInfoDao;
    @Autowired
    private ClassInfoService classInfoService;
    @Autowired
    private StudentInfoService studentInfoService;

    public PageInfo<XuankeInfo> findPage(Integer pageNum, Integer pageSize, HttpServletRequest request) {
        Account user =(Account)request.getSession().getAttribute("user");
        if(ObjectUtil.isEmpty(user)){
            throw new CustomException("-1","登陆失效，请重新登录");
        }
        PageHelper.startPage(pageNum,pageSize);
        List<XuankeInfo> list ;
        if(1 == user.getLevel()){
            list = xuankeInfoDao.selectAllClass();
        }
        else if(2 == user.getLevel()){
            list =xuankeInfoDao.findByPageCondition(user.getId(),null);
        }
        else {//(3 == user.getLevel()){
            list =xuankeInfoDao.findByPageCondition(null,user.getId());
        }
        for(XuankeInfo xuankeInfo : list){
            if(ObjectUtil.isNotEmpty(xuankeInfo.getZhuanyeid())) {
                ZhuanyeInfo zhuanyeInfo = zhuanyeInfoDao.selectById(xuankeInfo.getZhuanyeid());
                xuankeInfo.setZhuanyeName(zhuanyeInfo.getName());
            }
            if(ObjectUtil.isNotEmpty(xuankeInfo.getTeacherid())){
                TeacherInfo teacherInfo = teacherInfoDao.selectById(xuankeInfo.getTeacherid());
                xuankeInfo.setTeacherName(teacherInfo.getName());
            }
            if(ObjectUtil.isNotEmpty(xuankeInfo.getStudentid())){
                StudentInfo studentInfo = studentInfoDao.findById(xuankeInfo.getStudentid());
                xuankeInfo.setStudentName(studentInfo.getName());
            }
        }
        return PageInfo.of(list);
    }

    public PageInfo<XuankeInfo> findPageName(Integer pageNum, Integer pageSize, String name, HttpServletRequest request) {
        Account user =(Account)request.getSession().getAttribute("user");
        if(ObjectUtil.isEmpty(user)){
            throw new CustomException("-1","登陆失效，请重新登录");
        }
        PageHelper.startPage(pageNum,pageSize);
        List<XuankeInfo> list;
        //判断查询人的身份
        if(1 == user.getLevel()){
            list =xuankeInfoDao.findByNamePage(name);
        }
        else if(2 == user.getLevel()){
            list =xuankeInfoDao.findByPageCondition(user.getId(),null);
        }
        else {//(3 == user.getLevel()){
            list =xuankeInfoDao.findByPageCondition(null,user.getId());
        }


        for(XuankeInfo xuankeInfo: list){
            if(ObjectUtil.isNotEmpty(xuankeInfo.getZhuanyeid())) {
                ZhuanyeInfo zhuanyeInfo = zhuanyeInfoDao.selectById(xuankeInfo.getZhuanyeid());
                xuankeInfo.setZhuanyeName(zhuanyeInfo.getName());
            }
            if(ObjectUtil.isNotEmpty(xuankeInfo.getTeacherid())){
                TeacherInfo teacherInfo = teacherInfoDao.selectById(xuankeInfo.getTeacherid());
                xuankeInfo.setTeacherName(teacherInfo.getName());
            }
            if(ObjectUtil.isNotEmpty(xuankeInfo.getStudentid())){
                StudentInfo studentInfo = studentInfoDao.findById(xuankeInfo.getStudentid());
                xuankeInfo.setStudentName(studentInfo.getName());
            }
        }
        return PageInfo.of(list);
    }

    public void add(XuankeInfo xuankeInfo) {
        xuankeInfoDao.insertSelective(xuankeInfo);
        ClassInfo classInfo = classInfoDao.findByName(xuankeInfo.getName());
        classInfo.setYixuan(classInfo.getYixuan()+1);
    }



    public XuankeInfo find(String name, Long teacherid, long studentid) {
        return xuankeInfoDao.find(name,teacherid,studentid);
    }

    public void deleteById(Long id) {
        XuankeInfo xuankeInfo = xuankeInfoDao.selectBYId(id);
        ClassInfo classInfo = classInfoDao.findByNameAndTeacher(xuankeInfo.getName(),xuankeInfo.getTeacherid());
        xuankeInfoDao.deleteById(id);
        classInfo.setYixuan(classInfo.getYixuan() - 1 );
        classInfoDao.updateById(classInfo.getId(),
                classInfo.getName(),classInfo.getDecription(),classInfo.getZhuanyeid()
                ,classInfo.getScore(),classInfo.getTeacherid(),classInfo.getKaiban()
                ,classInfo.getTime(),classInfo.getLocation(),classInfo.getYixuan());//全部
    }

        public void update(XuankeInfo xuankeInfo) {
            StudentInfo studentInfo = studentInfoDao.findById(xuankeInfo.getStudentid());
            //if(studentInfo.getStatus().equals("已就业")){
            //    throw new CustomException("-1","此学生已经被其他公司录取了");
            //}
            //xuankeInfo.setStatus("已录取");

            //控制学生选课会让已选人数加一

            xuankeInfo.setYixuan(xuankeInfo.getYixuan()+1);
            xuankeInfoDao.updateById(xuankeInfo.getId(),
                    xuankeInfo.getName(),xuankeInfo.getDecription(),xuankeInfo.getZhuanyeid()
                    ,xuankeInfo.getScore(),xuankeInfo.getTeacherid(),xuankeInfo.getKaiban()
                    ,xuankeInfo.getTime(),xuankeInfo.getLocation(),xuankeInfo.getStudentid(),xuankeInfo.getStatus(),xuankeInfo.getYixuan());//全部

    }
    public void update2(XuankeInfo xuankeInfo) {
        StudentInfo studentInfo = studentInfoDao.findById(xuankeInfo.getStudentid());
        //if(studentInfo.getStatus().equals("已就业")){
        //    throw new CustomException("-1","此学生已经被其他公司录取了");
        //}
        //xuankeInfo.setStatus("已录取");

        //控制学生选课会让已选人数加一

        //xuankeInfo.setYixuan(xuankeInfo.getYixuan()+1);
        xuankeInfoDao.updateById(xuankeInfo.getId(),
                xuankeInfo.getName(),xuankeInfo.getDecription(),xuankeInfo.getZhuanyeid()
                ,xuankeInfo.getScore(),xuankeInfo.getTeacherid(),xuankeInfo.getKaiban()
                ,xuankeInfo.getTime(),xuankeInfo.getLocation(),xuankeInfo.getStudentid(),xuankeInfo.getStatus(),xuankeInfo.getYixuan());//全部

    }
}
